package org.convallaria.system.biz.service.sys;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.convallaria.system.biz.entity.SysLoginLog;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 登录日志服务接口
 * 
 * @author convallaria
 * @since 1.0.0
 */
public interface SysLoginLogService {

    /**
     * 记录登录日志
     * 
     * @param username 用户名
     * @param loginIp 登录IP
     * @param loginLocation 登录地点
     * @param browser 浏览器
     * @param os 操作系统
     * @param status 状态
     * @param msg 消息
     * @param tenantId 租户ID
     */
    void recordLoginLog(String username, String loginIp, String loginLocation, 
                       String browser, String os, String status, String msg, Long tenantId);

    /**
     * 分页查询登录日志
     * 
     * @param page 分页参数
     * @param userId 用户ID
     * @return 登录日志分页结果
     */
    IPage<SysLoginLog> getLoginLogPage(Page<SysLoginLog> page, Long userId);

    /**
     * 统计登录次数
     * 
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param status 状态
     * @return 登录次数
     */
    Long countLoginLogs(Long userId, LocalDateTime startTime, LocalDateTime endTime, String status);

    /**
     * 统计唯一用户数
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 唯一用户数
     */
    Long countUniqueUsers(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 统计唯一IP数
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 唯一IP数
     */
    Long countUniqueIps(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取用户登录历史
     * 
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 登录历史
     */
    IPage<SysLoginLog> getUserLoginHistory(Long userId, Integer pageNum, Integer pageSize);
}
